
#pragma once

#include <stdint.h>
#include "SurfaceFormat.h"

namespace FlameEngine
{
	struct GraphicsSetting
	{
	public:
		enum DeviceFlag
		{
			df_multithread = 0x0001,
			df_debug = 0x0002,
			df_dxBgraPupport = 0x0004,
		};

		enum DeviceLevel:uint8_t
		{
			dl_dx9_3,
			dl_dx10,
			dl_dx10_1,		
			dl_dx11,
			dl_dx11_1
		};

		enum AdapterType :uint8_t
		{
			at_default,
			at_nvPerfHud,
		};

		enum SwapChainFlag :uint8_t
		{
			scf_nonRotation = 1,
			scf_allowModeSwitch = 2,
			scf_gdiCompatible = 4,
		};

		enum SwapEffect:uint8_t
		{
			sw_discard,
			sw_sequential,
		};

		enum DeviceType:uint8_t
		{
			dt_none,
			dt_hardware,
			dt_software,
			dt_reference,
		};

		GraphicsSetting();

		uint32_t m_width;
		uint32_t m_height;
		uint32_t m_refreshRate;
		SurfaceFormat m_backbufferFormat;
		SurfaceFormat m_depthBufferFormat;

		uint8_t m_multiSampleCount;
		uint8_t m_multiSampleQuality;
		uint32_t m_swapChainBufferCount;
		
		SwapChainFlag m_swapChainFlag;
		SwapEffect m_swapEffect;
		
		bool m_isWindowed;

	};
}